package com.nzd.slsharing.util;

import javax.crypto.*;
import javax.crypto.spec.*;
import java.util.Base64;

public class EncryptionUtils {

    // 默认密钥（16 字节，即 128 位）
    private static final String SECRET_KEY = "1234567890123456"; // 16 字符的密钥（128 位）

    // 固定的 IV 示例，生产环境中应随机生成并存储
    private static final String IV = "1234567890123456";  // 16 字节初始化向量（IV）

    /**
     * 加密方法
     *
     * @param data 明文
     * @return 密文（Base64 编码）
     * @throws Exception
     */
    public static String encrypt(String data) throws Exception {
        // 创建密钥对象
        SecretKeySpec secretKey = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");

        // 创建初始化向量（IV）对象
        IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes());

        // 创建 Cipher 对象并初始化为加密模式
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);

        // 执行加密并返回结果（Base64 编码）
        byte[] encryptedData = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    /**
     * 解密方法
     *
     * @param encryptedData 密文（Base64 编码）
     * @return 明文
     * @throws Exception
     */
    public static String decrypt(String encryptedData) throws Exception {
        // 创建密钥对象
        SecretKeySpec secretKey = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");

        // 创建初始化向量（IV）对象
        IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes());

        // 创建 Cipher 对象并初始化为解密模式
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);

        // 执行解密
        byte[] decodedData = Base64.getDecoder().decode(encryptedData);
        byte[] decryptedData = cipher.doFinal(decodedData);

        // 返回解密后的明文
        return new String(decryptedData);
    }


    public static void main(String[] args) throws Exception {
     String   ji=encrypt("123456");
        System.out.println("加密"+ji);
        String   jie=decrypt(ji);
        System.out.println("解密"+jie);
    }
}
